import plugins from './src/plugins' // vue插件，用于全局共享变量/方法/vuex

import modelerStore from './src/components/Process/common/global'
// 分页组件
import Pagination from "./src/components/Pagination";
// 自定义表格工具组件
import RightToolbar from "./src/components/RightToolbar"
// 字典数据组件
import DictData from './src/components/DictData'

// 关于组件
window.initAboutCtrl = {};

/**
 * 解析模块
 * @param modulesList  模块对象列表
 * @param type 模块类型，component 组件，function 方法，directive 指令
 */
const exportModule = (modulesList, type) => {
    // 获取模块对象列表
    let modules = modulesList.keys().reduce((obj, modulePath) => {
        // 模块名
        let pathArr = modulePath.split('/')
        let moduleName = pathArr[pathArr.length - 1].split('.')[0];
        // 模块对象
        let moduleObj = modulesList(modulePath);
        // 放入模块
        obj[moduleName] = moduleObj.default;
        // 组件的单个导出
        if (type === 'components' && process.env.NODE_ENV === 'production') {
            Object.assign(exports, {
                [moduleName]: moduleObj.default
            });
        }
        return obj;
    }, {});
    // 要导出的
    let exportModules;
    switch (type) {
        case 'components': {
            exportModules = function (Vue, opts = {}) {// 组件全局注册
                for (let i in modules) {
                    Vue.component(i, modules[i]);
                }
                // 注册全局方法
                Vue.prototype.modelerStore = modelerStore
                Vue.component('Pagination', Pagination)
                Vue.component('RightToolbar', RightToolbar)
                Vue.component('RightToolbar', RightToolbar)
                DictData.install(Vue)
                // plugins.install(Vue)
                Vue.use(plugins);
            };
            //支持使用标签方式引入
            if (typeof window !== "undefined" && window.Vue) {
                exportModules(window.Vue);
            }
            break;
        }   
    }
    return exportModules;
}



// --- 组件 ---
const componentsList = require.context("./src/packages", true, /\.vue$/);
const GmFlowableComponents = exportModule(componentsList, 'components');



// 合并导出
if (process.env.NODE_ENV === 'production') {
    Object.assign(exports,{GmFlowableComponents});
    
}
export {
    GmFlowableComponents
}